package com.example.myapplication.model;

import android.app.Application;
import android.content.Context;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;

import com.example.myapplication.bean.Merchant;
import com.example.myapplication.bean.User;
import com.example.myapplication.dao.MerchantDao;
import com.example.myapplication.dao.UserDao;
import com.example.myapplication.database.GreenDaoManager;

import java.util.List;

public class RegisterViewModel extends AndroidViewModel {

    private Context mContext;

    public RegisterViewModel(@NonNull Application application) {
        super(application);
        this.mContext = application;
    }

    /**
     * 用户注册方法
     * @param name 用户名
     * @param password 密码
     * @param listener 注册监听器
     */
    public void userRegister(String name, String password, IUserRegisterListener listener){
        UserDao userDao = GreenDaoManager.getmInstance().getDaoSession().getUserDao();
        List<User> users = userDao.loadAll();
        // 判断监听器是否为空
        if (listener == null){
            // 若为空，则调用注册失败方法，并返回错误信息
            listener.userRegisterFail("未知错误");
            return;
        }
        // 创建用户对象

        User user = new User();
        user.setId(System.currentTimeMillis());
        // 设置用户ID为当前时间戳
        user.setUser_id(System.currentTimeMillis() + "");
        // 设置用户名
        user.setName(name);
        // 设置密码为空
        user.setPassword(password);
        // 调用数据库工具类的插入方法，将用户信息插入数据库
        if (users==null ||users.size() ==0){
           userDao.insert(user);
            // 若插入成功，则调用注册成功方法
            listener.userRegisterSuccess();
            return;
        }



        boolean has = false;
        for (int i = 0; i < users.size(); i++) {
            if (name.equals(users.get(i).getName())){
                has = true;
            }
        }
        if (!has){
            userDao.insert(user);
            // 若插入成功，则调用注册成功方法
            listener.userRegisterSuccess();
            return;
        }
        // 若插入失败原因为其他错误，则调用注册失败方法，并返回错误信息
        listener.userRegisterFail("注册失败");
    }

    /**
     * 商户注册方法
     * @param name 用户名
     * @param password 密码
     * @param listener 注册监听器
     */
    public void merchantRegister(String name, String password, IMerchantRegisterListener listener){
        MerchantDao merchantDao = GreenDaoManager.getmInstance().getDaoSession().getMerchantDao();
        List<Merchant> merchantList = merchantDao.loadAll();
        // 判断监听器是否为空
        if (listener == null){
            // 若为空，则调用注册失败方法，并返回错误信息
            listener.merchantRegisterFail("未知错误");
            return;
        }
        // 创建用户对象
        Merchant merchant = new Merchant();
        // 设置用户名
        merchant.setUsername(name);
        merchant.setId(System.currentTimeMillis());
        // 设置密码为空
        merchant.setPassword(password);
        // 调用数据库工具类的插入方法，将用户信息插入数据库
        if (merchantList ==null || merchantList.size() ==0){
            // 若插入成功，则调用注册成功方法
            merchantDao.insert(merchant);
            listener.merchantRegisterSuccess();
            return;
        }

        boolean has = false;
        for (int i = 0; i < merchantList.size(); i++) {
            if (name.equals(merchantList.get(i).getUsername())){
                has = true;
            }
        }
        if (!has){
            merchantDao.insert(merchant);
            // 若插入成功，则调用注册成功方法
            listener.merchantRegisterSuccess();
            return;
        }
        // 若插入失败原因为其他错误，则调用注册失败方法，并返回错误信息
        listener.merchantRegisterFail("注册失败");
    }
}
